package parser;

import exceptions.IllFormattedLineException;

public class Subfield {

	/**
	 * Erzeugt ein Unterfeld.
	 * 
	 * @param indicator 	nicht null
	 * @param content		nicht null
	 * @throws IllFormattedLineException 	wenn leerer String
	 */
	public Subfield(final Indicator indicator, final String content)
			throws IllFormattedLineException {
		if (indicator == null)
			throw new IllegalArgumentException("Indikator zu: '" + content +"' ist null");
		if (content == null)
			throw new IllegalArgumentException("Inhalt des Unterfeldes ist "
				+ "null");
		if (content.length() == 0)
			throw new IllFormattedLineException("Unterfeld ohne Inhalt");
		this.indicator = indicator;
		this.content = content;
	}

	@Override
	public String toString() {
		return " |$" + indicator.indicatorChar + "|:" + content;
	}

	/**
	 * Erzeugt ein Unterfeld.
	 * 
	 * @param tag 	nicht null.
	 * @param 		subStr in der Form "$<indikator><Inhalt>"
	 * @throws IllFormattedLineException	
	 * 				Wenn subStr nicht die richtige Länge hat. 
	 * 
	 */
	public Subfield(final Tag tag, final String subStr)
			throws IllFormattedLineException {
		final int minLenghth = 3;
		if (tag == null)
			throw new IllegalArgumentException("Tag ist null");
		if (subStr == null || subStr.length() < minLenghth)
			throw new IllFormattedLineException(
												"Übergebenes Unterfeld falsch: "
													+ subStr);
		this.indicator = tag.getIndicator(subStr.charAt(1), true);
		this.content = subStr.substring(2);
	}

	public final Indicator indicator;

	/*
	 * kann unter Umständen verändert werden:
	 * wim -> wim;wit
	 */
	String content;

	/**
	 * @param args
	 * @throws IllFormattedLineException 
	 */
	public static void main(String[] args) throws IllFormattedLineException {
		Tag tag = TagDB.findTag("150");
		Subfield sub = new Subfield(tag, "$axxx");
		System.err.println(sub);
		

	}

}
